package com.example.designpattern.creational.prototype;

//public class MilkTea {
//    public String type;
//    public boolean ice;
//
//    public MilkTea clone(){
//        MilkTea milkTea = new MilkTea();
//        milkTea.type = this.type;
//        milkTea.ice = this.ice;
//        return milkTea;
//    }
//}

import lombok.NonNull;

public class MilkTea implements Cloneable{
    public String type;
    public String size = "中杯";
    public boolean pearl = true;
    public boolean ice = false;

    /**
     * 值得注意的是，Java 自带的 clone 方法是浅拷贝的。
     * 也就是说调用此对象的 clone 方法，只有基本类型的参数会被拷贝一份，非基本类型的对象不会被拷贝一份，而是继续使用传递引用的方式。
     * 如果需要实现深拷贝，必须要自己手动修改 clone 方法才行。
     *
     * @return
     * @throws CloneNotSupportedException
     */
    @NonNull
    @Override
    protected MilkTea clone() throws CloneNotSupportedException {
        // todo 引用类型深拷贝则需要修改
        return (MilkTea) super.clone();
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public boolean isIce() {
        return ice;
    }

    public void setIce(boolean ice) {
        this.ice = ice;
    }

    public boolean isPearl() {
        return pearl;
    }

    public void setPearl(boolean pearl) {
        this.pearl = pearl;
    }

    public String getSize() {
        return size;
    }

    public void setSize(String size) {
        this.size = size;
    }
}
